/*-
 * Copyright (c) 2007 John Birrell (jb@freebsd.org)
 * Copyright (c) 2009-2011,2014 Kai Wang
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 *
 * $Id: libdwarf.h 3295 2016-01-08 22:08:10Z jkoshy $
 */

#ifndef _LIBDWARF_H_
#define _LIBDWARF_H_

#ifdef _WIN32
/* VS2010 has stdint.h but not VS2008 */
typedef INT_PTR off_t;
typedef unsigned __int64 uint64_t;
typedef unsigned int uint32_t;
typedef unsigned short uint16_t;
typedef unsigned char uint8_t;
typedef __int64 int64_t;
typedef int int32_t;
typedef short int16_t;
typedef char int8_t;
#    ifdef __cplusplus
#        define __BEGIN_DECLS extern "C" {
#        define __END_DECLS }
#    else
#        define __BEGIN_DECLS /* nothing */
#        define __END_DECLS   /* nothing */
#    endif
#else
#    include <libelf.h>
#endif

typedef int Dwarf_Bool;
typedef uint64_t Dwarf_Off;
typedef uint64_t Dwarf_Unsigned;
typedef uint16_t Dwarf_Half;
typedef uint8_t Dwarf_Small;
typedef int64_t Dwarf_Signed;
typedef uint64_t Dwarf_Addr;
typedef void *Dwarf_Ptr;

typedef struct _Dwarf_Abbrev *Dwarf_Abbrev;
typedef struct _Dwarf_Arange *Dwarf_Arange;
typedef struct _Dwarf_ArangeSet *Dwarf_ArangeSet;
typedef struct _Dwarf_Attribute *Dwarf_Attribute;
typedef struct _Dwarf_Attribute *Dwarf_P_Attribute;
typedef struct _Dwarf_AttrDef *Dwarf_AttrDef;
typedef struct _Dwarf_Cie *Dwarf_Cie;
typedef struct _Dwarf_Cie *Dwarf_P_Cie;
typedef struct _Dwarf_Debug *Dwarf_Debug;
typedef struct _Dwarf_Debug *Dwarf_P_Debug;
typedef struct _Dwarf_Die *Dwarf_Die;
typedef struct _Dwarf_Die *Dwarf_P_Die;
typedef struct _Dwarf_Fde *Dwarf_Fde;
typedef struct _Dwarf_Fde *Dwarf_P_Fde;
typedef struct _Dwarf_FrameSec *Dwarf_FrameSec;
typedef struct _Dwarf_Line *Dwarf_Line;
typedef struct _Dwarf_LineFile *Dwarf_LineFile;
typedef struct _Dwarf_LineInfo *Dwarf_LineInfo;
typedef struct _Dwarf_MacroSet *Dwarf_MacroSet;
typedef struct _Dwarf_NamePair *Dwarf_NamePair;
typedef struct _Dwarf_NamePair *Dwarf_Func;
typedef struct _Dwarf_NamePair *Dwarf_Global;
typedef struct _Dwarf_NamePair *Dwarf_Type;
typedef struct _Dwarf_NamePair *Dwarf_Var;
typedef struct _Dwarf_NamePair *Dwarf_Weak;
typedef struct _Dwarf_NameTbl *Dwarf_NameTbl;
typedef struct _Dwarf_NameSec *Dwarf_NameSec;
typedef struct _Dwarf_P_Expr *Dwarf_P_Expr;
typedef struct _Dwarf_Rangelist *Dwarf_Rangelist;

typedef enum { DW_OBJECT_MSB, DW_OBJECT_LSB } Dwarf_Endianness;

typedef struct {
    Dwarf_Addr addr;
    Dwarf_Unsigned size;
    const char *name;
} Dwarf_Obj_Access_Section;

typedef struct {
    int (*get_section_info)(void *_obj, Dwarf_Half _index,
                            Dwarf_Obj_Access_Section *_ret_section, int *_error);
    Dwarf_Endianness (*get_byte_order)(void *_obj);
    Dwarf_Small (*get_length_size)(void *_obj);
    Dwarf_Small (*get_pointer_size)(void *_obj);
    Dwarf_Unsigned (*get_section_count)(void *_obj);
    int (*load_section)(void *_obj, Dwarf_Half _index, Dwarf_Small **_ret_data,
                        int *_error);
} Dwarf_Obj_Access_Methods;

typedef struct {
    void *object;
    const Dwarf_Obj_Access_Methods *methods;
} Dwarf_Obj_Access_Interface;

typedef int (*Dwarf_Callback_Func)(char *_name, int _size, Dwarf_Unsigned _type,
                                   Dwarf_Unsigned _flags, Dwarf_Unsigned _link,
                                   Dwarf_Unsigned _info, int *_index, int *_error);

typedef int (*Dwarf_Callback_Func_b)(char *_name, int _size, Dwarf_Unsigned _type,
                                     Dwarf_Unsigned _flags, Dwarf_Unsigned _link,
                                     Dwarf_Unsigned _info, Dwarf_Unsigned *_index,
                                     int *_error);

typedef Dwarf_Unsigned Dwarf_Tag;

typedef struct {
    Dwarf_Small lr_atom;
    Dwarf_Unsigned lr_number;
    Dwarf_Unsigned lr_number2;
    Dwarf_Unsigned lr_offset;
} Dwarf_Loc;

typedef struct {
    Dwarf_Addr ld_lopc;
    Dwarf_Addr ld_hipc;
    Dwarf_Half ld_cents;
    Dwarf_Loc *ld_s;
} Dwarf_Locdesc;

typedef struct {
    char signature[8];
} Dwarf_Sig8;

typedef struct {
    Dwarf_Unsigned bl_len;
    Dwarf_Ptr bl_data;
} Dwarf_Block;

enum Dwarf_Ranges_Entry_Type {
    DW_RANGES_ENTRY,
    DW_RANGES_ADDRESS_SELECTION,
    DW_RANGES_END
};

typedef struct {
    Dwarf_Unsigned dwr_addr1;
    Dwarf_Unsigned dwr_addr2;
    enum Dwarf_Ranges_Entry_Type dwr_type;
} Dwarf_Ranges;

enum Dwarf_Form_Class {
    DW_FORM_CLASS_UNKNOWN,
    DW_FORM_CLASS_ADDRESS,
    DW_FORM_CLASS_BLOCK,
    DW_FORM_CLASS_CONSTANT,
    DW_FORM_CLASS_EXPRLOC,
    DW_FORM_CLASS_FLAG,
    DW_FORM_CLASS_LINEPTR,
    DW_FORM_CLASS_LOCLISTPTR,
    DW_FORM_CLASS_MACPTR,
    DW_FORM_CLASS_RANGELISTPTR,
    DW_FORM_CLASS_REFERENCE,
    DW_FORM_CLASS_STRING
};

#ifndef DW_FRAME_HIGHEST_NORMAL_REGISTER
#    define DW_FRAME_HIGHEST_NORMAL_REGISTER 63
#endif

#define DW_FRAME_RA_COL (DW_FRAME_HIGHEST_NORMAL_REGISTER + 1)
#define DW_FRAME_STATIC_LINK (DW_FRAME_HIGHEST_NORMAL_REGISTER + 2)

#ifndef DW_FRAME_LAST_REG_NUM
#    define DW_FRAME_LAST_REG_NUM (DW_FRAME_HIGHEST_NORMAL_REGISTER + 3)
#endif

#ifndef DW_FRAME_REG_INITIAL_VALUE
#    define DW_FRAME_REG_INITIAL_VALUE DW_FRAME_SAME_VAL
#endif

#define DW_FRAME_UNDEFINED_VAL 1034
#define DW_FRAME_SAME_VAL 1035
#define DW_FRAME_CFA_COL3 1436

#define DW_EXPR_OFFSET 0
#define DW_EXPR_VAL_OFFSET 1
#define DW_EXPR_EXPRESSION 2
#define DW_EXPR_VAL_EXPRESSION 3

/*
 * Frame operation only for DWARF 2.
 */

#define DW_FRAME_CFA_COL 0

typedef struct {
    Dwarf_Small fp_base_op;
    Dwarf_Small fp_extended_op;
    Dwarf_Half fp_register;
    Dwarf_Signed fp_offset;
    Dwarf_Off fp_instr_offset;
} Dwarf_Frame_Op;

#ifndef DW_REG_TABLE_SIZE
#    define DW_REG_TABLE_SIZE 66
#endif

typedef struct {
    struct {
        Dwarf_Small dw_offset_relevant;
        Dwarf_Half dw_regnum;
        Dwarf_Addr dw_offset;
    } rules[DW_REG_TABLE_SIZE];
} Dwarf_Regtable;

/*
 * Frame operation for DWARF 3 and DWARF 2.
 */

typedef struct {
    Dwarf_Small fp_base_op;
    Dwarf_Small fp_extended_op;
    Dwarf_Half fp_register;
    Dwarf_Unsigned fp_offset_or_block_len;
    Dwarf_Small *fp_expr_block;
    Dwarf_Off fp_instr_offset;
} Dwarf_Frame_Op3;

typedef struct {
    Dwarf_Small dw_offset_relevant;
    Dwarf_Small dw_value_type;
    Dwarf_Half dw_regnum;
    Dwarf_Unsigned dw_offset_or_block_len;
    Dwarf_Ptr dw_block_ptr;
} Dwarf_Regtable_Entry3;

typedef struct {
    Dwarf_Regtable_Entry3 rt3_cfa_rule;
    Dwarf_Half rt3_reg_table_size;
    Dwarf_Regtable_Entry3 *rt3_rules;
} Dwarf_Regtable3;

typedef struct {
    Dwarf_Off dmd_offset;
    Dwarf_Small dmd_type;
    Dwarf_Signed dmd_lineno;
    Dwarf_Signed dmd_fileindex;
    char *dmd_macro;
} Dwarf_Macro_Details;

/*
 * Symbols denoting allocation types, for use with dwarf_dealloc(3).
 */

enum Dwarf_Allocation_Type {
    DW_DLA_ABBREV,
    DW_DLA_ADDR,
    DW_DLA_ARANGE,
    DW_DLA_ATTR,
    DW_DLA_BLOCK,
    DW_DLA_BOUNDS,
    DW_DLA_CIE,
    DW_DLA_DEBUG,
    DW_DLA_DIE,
    DW_DLA_ELLIST,
    DW_DLA_ERROR,
    DW_DLA_FDE,
    DW_DLA_FRAME_BLOCK,
    DW_DLA_FRAME_OP,
    DW_DLA_FUNC,
    DW_DLA_GLOBAL,
    DW_DLA_LINE,
    DW_DLA_LINEBUF,
    DW_DLA_LIST,
    DW_DLA_LOC,
    DW_DLA_LOCDESC,
    DW_DLA_LOC_BLOCK,
    DW_DLA_RANGES,
    DW_DLA_STRING,
    DW_DLA_SUBSCR,
    DW_DLA_TYPE,
    DW_DLA_TYPENAME,
    DW_DLA_VAR,
    DW_DLA_WEAK
};

/*
 * Relocation Type.
 */
enum Dwarf_Rel_Type {
    dwarf_drt_none = 0,
    dwarf_drt_data_reloc,
    dwarf_drt_segment_rel,
    dwarf_drt_first_of_length_pair,
    dwarf_drt_second_of_length_pair
};

/*
 * Relocation Entry.
 */
typedef struct Dwarf_Relocation_Data_s {
    unsigned char drd_type;
    unsigned char drd_length;
    Dwarf_Unsigned drd_offset;
    Dwarf_Unsigned drd_symbol_index;
} * Dwarf_Relocation_Data;

#define DWARF_DRD_BUFFER_VERSION 2

/*
 * Error numbers which are specific to this implementation.
 */
enum {
    DW_DLE_NONE,                       /* No error. */
    DW_DLE_ERROR,                      /* An error! */
    DW_DLE_ARGUMENT,                   /* Invalid argument. */
    DW_DLE_DEBUG_INFO_NULL,            /* Debug info NULL. */
    DW_DLE_NO_ENTRY,                   /* No entry. */
    DW_DLE_MEMORY,                     /* Insufficient memory. */
    DW_DLE_ELF,                        /* ELF error. */
    DW_DLE_CU_LENGTH_ERROR,            /* Invalid compilation unit data. */
    DW_DLE_VERSION_STAMP_ERROR,        /* Invalid version. */
    DW_DLE_DEBUG_ABBREV_NULL,          /* Abbrev not found. */
    DW_DLE_DIE_NO_CU_CONTEXT,          /* No current compilation unit. */
    DW_DLE_LOC_EXPR_BAD,               /* Invalid location expression. */
    DW_DLE_EXPR_LENGTH_BAD,            /* Invalid DWARF expression. */
    DW_DLE_DEBUG_LOC_SECTION_SHORT,    /* Loclist section too short. */
    DW_DLE_ATTR_FORM_BAD,              /* Invalid attribute form. */
    DW_DLE_DEBUG_LINE_LENGTH_BAD,      /* Line info section too short. */
    DW_DLE_LINE_FILE_NUM_BAD,          /* Invalid file number. */
    DW_DLE_DIR_INDEX_BAD,              /* Invalid dir index. */
    DW_DLE_DEBUG_FRAME_LENGTH_BAD,     /* Frame section too short. */
    DW_DLE_NO_CIE_FOR_FDE,             /* CIE not found for certain FDE. */
    DW_DLE_FRAME_AUGMENTATION_UNKNOWN, /* Unknown CIE augmentation. */
    DW_DLE_FRAME_INSTR_EXEC_ERROR,     /* Frame instruction exec error. */
    DW_DLE_FRAME_VERSION_BAD,          /* Invalid frame section version. */
    DW_DLE_FRAME_TABLE_COL_BAD,        /* Invalid table column. */
    DW_DLE_DF_REG_NUM_TOO_HIGH,        /* Insufficient regtable space. */
    DW_DLE_PC_NOT_IN_FDE_RANGE,        /* PC requested not in the FDE range. */
    DW_DLE_ARANGE_OFFSET_BAD,          /* Invalid arange offset. */
    DW_DLE_DEBUG_MACRO_INCONSISTENT,   /* Invalid macinfo data. */
    DW_DLE_ELF_SECT_ERR,               /* Application callback failed. */
    DW_DLE_NUM                         /* Max error number. */
};

/*
 * Mapping of SGI libdwarf error codes for comptibility.
 */
#define DW_DLE_DBG_ALLOC DW_DLE_MEMORY
#define DW_DLE_ALLOC_FAIL DW_DLE_MEMORY
#define DW_DLE_SECT_ALLOC DW_DLE_MEMORY
#define DW_DLE_FILE_ENTRY_ALLOC DW_DLE_MEMORY
#define DW_DLE_LINE_ALLOC DW_DLE_MEMORY
#define DW_DLE_FPGM_ALLOC DW_DLE_MEMORY
#define DW_DLE_INCDIR_ALLOC DW_DLE_MEMORY
#define DW_DLE_STRING_ALLOC DW_DLE_MEMORY
#define DW_DLE_CHUNK_ALLOC DW_DLE_MEMORY
#define DW_DLE_CIE_ALLOC DW_DLE_MEMORY
#define DW_DLE_FDE_ALLOC DW_DLE_MEMORY
#define DW_DLE_CIE_OFFS_ALLOC DW_DLE_MEMORY
#define DW_DLE_DIE_ALLOC DW_DLE_MEMORY
#define DW_DLE_ATTR_ALLOC DW_DLE_MEMORY
#define DW_DLE_ABBREV_ALLOC DW_DLE_MEMORY
#define DW_DLE_ADDR_ALLOC DW_DLE_MEMORY
#define DW_DLE_REL_ALLOC DW_DLE_MEMORY
#define DW_DLE_MACINFO_MALLOC_FAIL DW_DLE_MEMORY
#define DW_DLE_DEBUG_MACRO_MALLOC_SPACE DW_DLE_MEMORY
#define DW_DLE_DF_ALLOC_FAIL DW_DLE_MEMORY
#define DW_DLE_RELOC_SECTION_MALLOC_FAIL DW_DLE_MEMORY
#define DW_DLE_DBG_NULL DW_DLE_ARGUMENT
#define DW_DLE_DIE_NULL DW_DLE_ARGUMENT
#define DW_DLE_FDE_NULL DW_DLE_ARGUMENT
#define DW_DLE_CIE_NULL DW_DLE_ARGUMENT
#define DW_DLE_ATTR_NULL DW_DLE_ARGUMENT
#define DW_DLE_GLOBAL_NULL DW_DLE_ARGUMENT
#define DW_DLE_ARANGES_NULL DW_DLE_ARGUMENT
#define DW_DLE_ARANGE_NULL DW_DLE_ARGUMENT
#define DW_DLE_EXPR_NULL DW_DLE_ARGUMENT
#define DW_DLE_FUNC_NULL DW_DLE_ARGUMENT
#define DW_DLE_TYPE_NULL DW_DLE_ARGUMENT
#define DW_DLE_VAR_NULL DW_DLE_ARGUMENT
#define DW_DLE_WEAK_NULL DW_DLE_ARGUMENT
#define DW_DLE_ELF_BEGIN_ERROR DW_DLE_ELF
#define DW_DLE_ELF_GETEHDR_ERROR DW_DLE_ELF
#define DW_DLE_ELF_GETSHDR_ERROR DW_DLE_ELF
#define DW_DLE_ELF_STRPTR_ERROR DW_DLE_ELF
#define DW_DLE_ELF_SECT_ERROR DW_DLE_ELF
#define DW_DLE_ELF_GETIDENT_ERROR DW_DLE_ELF

typedef struct _Dwarf_Error {
    int err_error;        /* DWARF error. */
    int err_elferror;     /* ELF error. */
    const char *err_func; /* Function name where error occurred. */
    int err_line;         /* Line number where error occurred. */
    char err_msg[1024];   /* Formatted error message. */
} Dwarf_Error;

/*
 * Dwarf error handler.
 */
typedef void (*Dwarf_Handler)(Dwarf_Error, Dwarf_Ptr);

#define dwarf_errno(error) error.err_error
#define dwarf_errmsg(error) dwarf_errmsg_(&error)

/*
 * Return values which have to be compatible with other
 * implementations of libdwarf.
 */
#define DW_DLV_NO_ENTRY -1
#define DW_DLV_OK 0
#define DW_DLV_ERROR 1
#define DW_DLV_BADADDR NULL
#define DW_DLV_NOCOUNT ((Dwarf_Signed)-1)

/*
 * Access modes.
 */
#define DW_DLC_READ 0x0001
#define DW_DLC_WRITE 0x0002
#define DW_DLC_RDWR 0x0004

/*
 * Flags used by libdwarf producer.
 */
#define DW_DLC_SIZE_64 0x40000000
#define DW_DLC_SIZE_32 0x20000000
#define DW_DLC_OFFSET_SIZE_64 0x10000000
#define DW_DLC_ISA_MIPS 0x80000000
#define DW_DLC_ISA_IA64 0x01000000
#define DW_DLC_STREAM_RELOCATIONS 0x02000000
#define DW_DLC_SYMBOLIC_RELOCATIONS 0x04000000
#define DW_DLC_TARGET_BIGENDIAN 0x08000000
#define DW_DLC_TARGET_LITTLEENDIAN 0x00100000

/*
 * Instruction set architectures supported by this implementation.
 */
enum Dwarf_ISA {
    DW_ISA_ARM,
    DW_ISA_IA64,
    DW_ISA_MIPS,
    DW_ISA_PPC,
    DW_ISA_SPARC,
    DW_ISA_X86,
    DW_ISA_X86_64,
    DW_ISA_AARCH64,
    DW_ISA_MAX
};

/* Function prototype definitions. */
#ifdef __cplusplus
extern "C" {
#endif
Dwarf_P_Attribute
dwarf_add_AT_comp_dir(Dwarf_P_Die, char *, Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_const_value_signedint(Dwarf_P_Die, Dwarf_Signed, Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_const_value_string(Dwarf_P_Die, char *, Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_const_value_unsignedint(Dwarf_P_Die, Dwarf_Unsigned, Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_dataref(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, Dwarf_Unsigned,
                     Dwarf_Unsigned, Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_flag(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, Dwarf_Small, Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_location_expr(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, Dwarf_P_Expr,
                           Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_name(Dwarf_P_Die, char *, Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_producer(Dwarf_P_Die, char *, Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_ref_address(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, Dwarf_Unsigned,
                         Dwarf_Unsigned, Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_reference(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, Dwarf_P_Die,
                       Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_signed_const(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, Dwarf_Signed,
                          Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_string(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, char *, Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_targ_address(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, Dwarf_Unsigned,
                          Dwarf_Signed, Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_targ_address_b(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, Dwarf_Unsigned,
                            Dwarf_Unsigned, Dwarf_Error *);
Dwarf_P_Attribute
dwarf_add_AT_unsigned_const(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Half, Dwarf_Unsigned,
                            Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_arange(Dwarf_P_Debug, Dwarf_Addr, Dwarf_Unsigned, Dwarf_Signed, Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_arange_b(Dwarf_P_Debug, Dwarf_Addr, Dwarf_Unsigned, Dwarf_Unsigned,
                   Dwarf_Unsigned, Dwarf_Addr, Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_die_to_debug(Dwarf_P_Debug, Dwarf_P_Die, Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_directory_decl(Dwarf_P_Debug, char *, Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_expr_addr(Dwarf_P_Expr, Dwarf_Unsigned, Dwarf_Signed, Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_expr_addr_b(Dwarf_P_Expr, Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_expr_gen(Dwarf_P_Expr, Dwarf_Small, Dwarf_Unsigned, Dwarf_Unsigned,
                   Dwarf_Error *);
Dwarf_P_Fde
dwarf_add_fde_inst(Dwarf_P_Fde, Dwarf_Small, Dwarf_Unsigned, Dwarf_Unsigned,
                   Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_file_decl(Dwarf_P_Debug, char *, Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Unsigned,
                    Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_frame_cie(Dwarf_P_Debug, char *, Dwarf_Small, Dwarf_Small, Dwarf_Small,
                    Dwarf_Ptr, Dwarf_Unsigned, Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_frame_fde(Dwarf_P_Debug, Dwarf_P_Fde, Dwarf_P_Die, Dwarf_Unsigned, Dwarf_Addr,
                    Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_frame_fde_b(Dwarf_P_Debug, Dwarf_P_Fde, Dwarf_P_Die, Dwarf_Unsigned, Dwarf_Addr,
                      Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Addr,
                      Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_funcname(Dwarf_P_Debug, Dwarf_P_Die, char *, Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_line_entry(Dwarf_P_Debug, Dwarf_Unsigned, Dwarf_Addr, Dwarf_Unsigned,
                     Dwarf_Signed, Dwarf_Bool, Dwarf_Bool, Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_pubname(Dwarf_P_Debug, Dwarf_P_Die, char *, Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_typename(Dwarf_P_Debug, Dwarf_P_Die, char *, Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_varname(Dwarf_P_Debug, Dwarf_P_Die, char *, Dwarf_Error *);
Dwarf_Unsigned
dwarf_add_weakname(Dwarf_P_Debug, Dwarf_P_Die, char *, Dwarf_Error *);
int
dwarf_arrayorder(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_attr(Dwarf_Die, Dwarf_Half, Dwarf_Attribute *, Dwarf_Error *);
int
dwarf_attrlist(Dwarf_Die, Dwarf_Attribute **, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_attroffset(Dwarf_Attribute, Dwarf_Off *, Dwarf_Error *);
int
dwarf_attrval_flag(Dwarf_Die, Dwarf_Half, Dwarf_Bool *, Dwarf_Error *);
int
dwarf_attrval_signed(Dwarf_Die, Dwarf_Half, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_attrval_string(Dwarf_Die, Dwarf_Half, const char **, Dwarf_Error *);
int
dwarf_attrval_unsigned(Dwarf_Die, Dwarf_Half, Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_bitoffset(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_bitsize(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_bytesize(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_child(Dwarf_Die, Dwarf_Die *, Dwarf_Error *);
void dwarf_dealloc(Dwarf_Debug, Dwarf_Ptr, Dwarf_Unsigned);
int
dwarf_def_macro(Dwarf_P_Debug, Dwarf_Unsigned, char *, char *, Dwarf_Error *);
int
dwarf_die_CU_offset(Dwarf_Die, Dwarf_Off *, Dwarf_Error *);
int
dwarf_die_CU_offset_range(Dwarf_Die, Dwarf_Off *, Dwarf_Off *, Dwarf_Error *);
int dwarf_die_abbrev_code(Dwarf_Die);
Dwarf_P_Die
dwarf_die_link(Dwarf_P_Die, Dwarf_P_Die, Dwarf_P_Die, Dwarf_P_Die, Dwarf_P_Die,
               Dwarf_Error *);
int
dwarf_diename(Dwarf_Die, char **, Dwarf_Error *);
int
dwarf_dieoffset(Dwarf_Die, Dwarf_Off *, Dwarf_Error *);
#ifdef __APPLE__
int
dwarf_macho_init(Dwarf_Ptr, int, Dwarf_Handler, Dwarf_Ptr, Dwarf_Debug *, Dwarf_Error *);
#elif !defined(_WIN32)
int
dwarf_elf_init(Elf *, int, Dwarf_Handler, Dwarf_Ptr, Dwarf_Debug *, Dwarf_Error *);
#else
int
dwarf_pecoff_init(Dwarf_Ptr, int, Dwarf_Handler, Dwarf_Ptr, Dwarf_Debug *, Dwarf_Error *);
#endif
int
dwarf_end_macro_file(Dwarf_P_Debug, Dwarf_Error *);
const char *
dwarf_errmsg_(Dwarf_Error *);
int
dwarf_expand_frame_instructions(Dwarf_Cie, Dwarf_Ptr, Dwarf_Unsigned, Dwarf_Frame_Op **,
                                Dwarf_Signed *, Dwarf_Error *);
Dwarf_Unsigned
dwarf_expr_current_offset(Dwarf_P_Expr, Dwarf_Error *);
Dwarf_Addr
dwarf_expr_into_block(Dwarf_P_Expr, Dwarf_Unsigned *, Dwarf_Error *);
Dwarf_P_Fde
dwarf_fde_cfa_offset(Dwarf_P_Fde, Dwarf_Unsigned, Dwarf_Signed, Dwarf_Error *);
void
dwarf_fde_cie_list_dealloc(Dwarf_Debug, Dwarf_Cie *, Dwarf_Signed, Dwarf_Fde *,
                           Dwarf_Signed);
char *
dwarf_find_macro_value_start(char *);
int
dwarf_finish(Dwarf_Debug, Dwarf_Error *);
int
dwarf_formaddr(Dwarf_Attribute, Dwarf_Addr *, Dwarf_Error *);
int
dwarf_formblock(Dwarf_Attribute, Dwarf_Block **, Dwarf_Error *);
int
dwarf_formexprloc(Dwarf_Attribute, Dwarf_Unsigned *, Dwarf_Ptr *, Dwarf_Error *);
int
dwarf_formflag(Dwarf_Attribute, Dwarf_Bool *, Dwarf_Error *);
int
dwarf_formref(Dwarf_Attribute, Dwarf_Off *, Dwarf_Error *);
int
dwarf_formsdata(Dwarf_Attribute, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_formsig8(Dwarf_Attribute, Dwarf_Sig8 *, Dwarf_Error *);
int
dwarf_formstring(Dwarf_Attribute, char **, Dwarf_Error *);
int
dwarf_formudata(Dwarf_Attribute, Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_func_cu_offset(Dwarf_Func, Dwarf_Off *, Dwarf_Error *);
int
dwarf_func_die_offset(Dwarf_Func, Dwarf_Off *, Dwarf_Error *);
int
dwarf_func_name_offsets(Dwarf_Func, char **, Dwarf_Off *, Dwarf_Off *, Dwarf_Error *);
int
dwarf_funcname(Dwarf_Func, char **, Dwarf_Error *);
void
dwarf_funcs_dealloc(Dwarf_Debug, Dwarf_Func *, Dwarf_Signed);
int
dwarf_get_ACCESS_name(unsigned, const char **);
int
dwarf_get_ATE_name(unsigned, const char **);
int
dwarf_get_AT_name(unsigned, const char **);
int
dwarf_get_CC_name(unsigned, const char **);
int
dwarf_get_CFA_name(unsigned, const char **);
int
dwarf_get_CHILDREN_name(unsigned, const char **);
int
dwarf_get_DSC_name(unsigned, const char **);
int
dwarf_get_DS_name(unsigned, const char **);
int
dwarf_get_EH_name(unsigned, const char **);
int
dwarf_get_END_name(unsigned, const char **);
int
dwarf_get_FORM_name(unsigned, const char **);
int
dwarf_get_ID_name(unsigned, const char **);
int
dwarf_get_INL_name(unsigned, const char **);
int
dwarf_get_LANG_name(unsigned, const char **);
int
dwarf_get_LNE_name(unsigned, const char **);
int
dwarf_get_LNS_name(unsigned, const char **);
int
dwarf_get_MACINFO_name(unsigned, const char **);
int
dwarf_get_OP_name(unsigned, const char **);
int
dwarf_get_ORD_name(unsigned, const char **);
int
dwarf_get_TAG_name(unsigned, const char **);
int
dwarf_get_VIRTUALITY_name(unsigned, const char **);
int
dwarf_get_VIS_name(unsigned, const char **);
int
dwarf_get_abbrev(Dwarf_Debug, Dwarf_Unsigned, Dwarf_Abbrev *, Dwarf_Unsigned *,
                 Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_get_abbrev_children_flag(Dwarf_Abbrev, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_get_abbrev_code(Dwarf_Abbrev, Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_get_abbrev_entry(Dwarf_Abbrev, Dwarf_Signed, Dwarf_Half *, Dwarf_Signed *,
                       Dwarf_Off *, Dwarf_Error *);
int
dwarf_get_abbrev_tag(Dwarf_Abbrev, Dwarf_Half *, Dwarf_Error *);
int
dwarf_get_address_size(Dwarf_Debug, Dwarf_Half *, Dwarf_Error *);
int
dwarf_get_arange(Dwarf_Arange *, Dwarf_Unsigned, Dwarf_Addr, Dwarf_Arange *,
                 Dwarf_Error *);
int
dwarf_get_arange_cu_header_offset(Dwarf_Arange, Dwarf_Off *, Dwarf_Error *);
int
dwarf_get_arange_info(Dwarf_Arange, Dwarf_Addr *, Dwarf_Unsigned *, Dwarf_Off *,
                      Dwarf_Error *);
int
dwarf_get_aranges(Dwarf_Debug, Dwarf_Arange **, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_get_cie_index(Dwarf_Cie, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_get_cie_info(Dwarf_Cie, Dwarf_Unsigned *, Dwarf_Small *, char **, Dwarf_Unsigned *,
                   Dwarf_Unsigned *, Dwarf_Half *, Dwarf_Ptr *, Dwarf_Unsigned *,
                   Dwarf_Error *);
int
dwarf_get_cie_of_fde(Dwarf_Fde, Dwarf_Cie *, Dwarf_Error *);
int
dwarf_get_cu_die_offset(Dwarf_Arange, Dwarf_Off *, Dwarf_Error *);
int
dwarf_get_cu_die_offset_given_cu_header_offset(Dwarf_Debug, Dwarf_Off, Dwarf_Off *,
                                               Dwarf_Error *);
int
dwarf_get_cu_die_offset_given_cu_header_offset_b(Dwarf_Debug, Dwarf_Off, Dwarf_Bool,
                                                 Dwarf_Off *, Dwarf_Error *);
Dwarf_Bool dwarf_get_die_infotypes_flag(Dwarf_Die);
#ifndef _WIN32
int
dwarf_get_elf(Dwarf_Debug, Elf **, Dwarf_Error *);
#endif
int
dwarf_get_fde_at_pc(Dwarf_Fde *, Dwarf_Addr, Dwarf_Fde *, Dwarf_Addr *, Dwarf_Addr *,
                    Dwarf_Error *);
int
dwarf_get_fde_info_for_all_regs(Dwarf_Fde, Dwarf_Addr, Dwarf_Regtable *, Dwarf_Addr *,
                                Dwarf_Error *);
int
dwarf_get_fde_info_for_all_regs3(Dwarf_Fde, Dwarf_Addr, Dwarf_Regtable3 *, Dwarf_Addr *,
                                 Dwarf_Error *);
int
dwarf_get_fde_info_for_cfa_reg3(Dwarf_Fde, Dwarf_Addr, Dwarf_Small *, Dwarf_Signed *,
                                Dwarf_Signed *, Dwarf_Signed *, Dwarf_Ptr *, Dwarf_Addr *,
                                Dwarf_Error *);
int
dwarf_get_fde_info_for_reg(Dwarf_Fde, Dwarf_Half, Dwarf_Addr, Dwarf_Signed *,
                           Dwarf_Signed *, Dwarf_Signed *, Dwarf_Addr *, Dwarf_Error *);
int
dwarf_get_fde_info_for_reg3(Dwarf_Fde, Dwarf_Half, Dwarf_Addr, Dwarf_Small *,
                            Dwarf_Signed *, Dwarf_Signed *, Dwarf_Signed *, Dwarf_Ptr *,
                            Dwarf_Addr *, Dwarf_Error *);
int
dwarf_get_fde_instr_bytes(Dwarf_Fde, Dwarf_Ptr *, Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_get_fde_list(Dwarf_Debug, Dwarf_Cie **, Dwarf_Signed *, Dwarf_Fde **,
                   Dwarf_Signed *, Dwarf_Error *);
int
dwarf_get_fde_list_eh(Dwarf_Debug, Dwarf_Cie **, Dwarf_Signed *, Dwarf_Fde **,
                      Dwarf_Signed *, Dwarf_Error *);
int
dwarf_get_fde_n(Dwarf_Fde *, Dwarf_Unsigned, Dwarf_Fde *, Dwarf_Error *);
int
dwarf_get_fde_range(Dwarf_Fde, Dwarf_Addr *, Dwarf_Unsigned *, Dwarf_Ptr *,
                    Dwarf_Unsigned *, Dwarf_Off *, Dwarf_Signed *, Dwarf_Off *,
                    Dwarf_Error *);
enum Dwarf_Form_Class dwarf_get_form_class(Dwarf_Half, Dwarf_Half, Dwarf_Half,
                                           Dwarf_Half);
int
dwarf_get_funcs(Dwarf_Debug, Dwarf_Func **, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_get_globals(Dwarf_Debug, Dwarf_Global **, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_get_loclist_entry(Dwarf_Debug, Dwarf_Unsigned, Dwarf_Addr *, Dwarf_Addr *,
                        Dwarf_Ptr *, Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_get_macro_details(Dwarf_Debug, Dwarf_Off, Dwarf_Unsigned, Dwarf_Signed *,
                        Dwarf_Macro_Details **, Dwarf_Error *);
int
dwarf_get_pubtypes(Dwarf_Debug, Dwarf_Type **, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_get_ranges(Dwarf_Debug, Dwarf_Off, Dwarf_Ranges **, Dwarf_Signed *,
                 Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_get_ranges_a(Dwarf_Debug, Dwarf_Off, Dwarf_Die, Dwarf_Ranges **, Dwarf_Signed *,
                   Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_get_relocation_info(Dwarf_P_Debug, Dwarf_Signed *, Dwarf_Signed *, Dwarf_Unsigned *,
                          Dwarf_Relocation_Data *, Dwarf_Error *);
int
dwarf_get_relocation_info_count(Dwarf_P_Debug, Dwarf_Unsigned *, int *, Dwarf_Error *);
Dwarf_Ptr
dwarf_get_section_bytes(Dwarf_P_Debug, Dwarf_Signed, Dwarf_Signed *, Dwarf_Unsigned *,
                        Dwarf_Error *);
int
dwarf_get_section_max_offsets(Dwarf_Debug, Dwarf_Unsigned *, Dwarf_Unsigned *,
                              Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *,
                              Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *,
                              Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *);
int
dwarf_get_section_max_offsets_b(Dwarf_Debug, Dwarf_Unsigned *, Dwarf_Unsigned *,
                                Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *,
                                Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *,
                                Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Unsigned *,
                                Dwarf_Unsigned *);
int
dwarf_get_str(Dwarf_Debug, Dwarf_Off, char **, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_get_types(Dwarf_Debug, Dwarf_Type **, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_get_vars(Dwarf_Debug, Dwarf_Var **, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_get_weaks(Dwarf_Debug, Dwarf_Weak **, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_global_cu_offset(Dwarf_Global, Dwarf_Off *, Dwarf_Error *);
int
dwarf_global_die_offset(Dwarf_Global, Dwarf_Off *, Dwarf_Error *);
int
dwarf_global_formref(Dwarf_Attribute, Dwarf_Off *, Dwarf_Error *);
int
dwarf_global_name_offsets(Dwarf_Global, char **, Dwarf_Off *, Dwarf_Off *, Dwarf_Error *);
void
dwarf_globals_dealloc(Dwarf_Debug, Dwarf_Global *, Dwarf_Signed);
int
dwarf_globname(Dwarf_Global, char **, Dwarf_Error *);
int
dwarf_hasattr(Dwarf_Die, Dwarf_Half, Dwarf_Bool *, Dwarf_Error *);
int
dwarf_hasform(Dwarf_Attribute, Dwarf_Half, Dwarf_Bool *, Dwarf_Error *);
int
dwarf_highpc(Dwarf_Die, Dwarf_Addr *, Dwarf_Error *);
int
dwarf_highpc_b(Dwarf_Die, Dwarf_Addr *, Dwarf_Half *, enum Dwarf_Form_Class *,
               Dwarf_Error *);
int
dwarf_init(int, int, Dwarf_Handler, Dwarf_Ptr, Dwarf_Debug *, Dwarf_Error *);
int
dwarf_line_srcfileno(Dwarf_Line, Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_lineaddr(Dwarf_Line, Dwarf_Addr *, Dwarf_Error *);
int
dwarf_linebeginstatement(Dwarf_Line, Dwarf_Bool *, Dwarf_Error *);
int
dwarf_lineblock(Dwarf_Line, Dwarf_Bool *, Dwarf_Error *);
int
dwarf_lineendsequence(Dwarf_Line, Dwarf_Bool *, Dwarf_Error *);
int
dwarf_lineno(Dwarf_Line, Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_lineoff(Dwarf_Line, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_linesrc(Dwarf_Line, char **, Dwarf_Error *);
Dwarf_Unsigned
dwarf_lne_end_sequence(Dwarf_P_Debug, Dwarf_Addr, Dwarf_Error *);
Dwarf_Unsigned
dwarf_lne_set_address(Dwarf_P_Debug, Dwarf_Addr, Dwarf_Unsigned, Dwarf_Error *);
int
dwarf_loclist(Dwarf_Attribute, Dwarf_Locdesc **, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_loclist_from_expr(Dwarf_Debug, Dwarf_Ptr, Dwarf_Unsigned, Dwarf_Locdesc **,
                        Dwarf_Signed *, Dwarf_Error *);
int
dwarf_loclist_from_expr_a(Dwarf_Debug, Dwarf_Ptr, Dwarf_Unsigned, Dwarf_Half,
                          Dwarf_Locdesc **, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_loclist_from_expr_b(Dwarf_Debug, Dwarf_Ptr, Dwarf_Unsigned, Dwarf_Half, Dwarf_Half,
                          Dwarf_Small, Dwarf_Locdesc **, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_loclist_n(Dwarf_Attribute, Dwarf_Locdesc ***, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_lowpc(Dwarf_Die, Dwarf_Addr *, Dwarf_Error *);
Dwarf_P_Die
dwarf_new_die(Dwarf_P_Debug, Dwarf_Tag, Dwarf_P_Die, Dwarf_P_Die, Dwarf_P_Die,
              Dwarf_P_Die, Dwarf_Error *);
Dwarf_P_Expr
dwarf_new_expr(Dwarf_P_Debug, Dwarf_Error *);
Dwarf_P_Fde
dwarf_new_fde(Dwarf_P_Debug, Dwarf_Error *);
int
dwarf_next_cu_header(Dwarf_Debug, Dwarf_Unsigned *, Dwarf_Half *, Dwarf_Off *,
                     Dwarf_Half *, Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_next_cu_header_b(Dwarf_Debug, Dwarf_Unsigned *, Dwarf_Half *, Dwarf_Off *,
                       Dwarf_Half *, Dwarf_Half *, Dwarf_Half *, Dwarf_Unsigned *,
                       Dwarf_Error *);
int
dwarf_next_cu_header_c(Dwarf_Debug, Dwarf_Bool, Dwarf_Unsigned *, Dwarf_Half *,
                       Dwarf_Off *, Dwarf_Half *, Dwarf_Half *, Dwarf_Half *,
                       Dwarf_Sig8 *, Dwarf_Unsigned *, Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_next_types_section(Dwarf_Debug, Dwarf_Error *);
int
dwarf_object_finish(Dwarf_Debug, Dwarf_Error *);
int
dwarf_object_init(Dwarf_Obj_Access_Interface *, Dwarf_Handler, Dwarf_Ptr, Dwarf_Debug *,
                  Dwarf_Error *);
int
dwarf_offdie(Dwarf_Debug, Dwarf_Off, Dwarf_Die *, Dwarf_Error *);
int
dwarf_offdie_b(Dwarf_Debug, Dwarf_Off, Dwarf_Bool, Dwarf_Die *, Dwarf_Error *);
Dwarf_Unsigned
dwarf_producer_finish(Dwarf_P_Debug, Dwarf_Error *);
Dwarf_P_Debug
dwarf_producer_init(Dwarf_Unsigned, Dwarf_Callback_Func, Dwarf_Handler, Dwarf_Ptr,
                    Dwarf_Error *);
Dwarf_P_Debug
dwarf_producer_init_b(Dwarf_Unsigned, Dwarf_Callback_Func_b, Dwarf_Handler, Dwarf_Ptr,
                      Dwarf_Error *);
int
dwarf_producer_set_isa(Dwarf_P_Debug, enum Dwarf_ISA, Dwarf_Error *);
int
dwarf_pubtype_cu_offset(Dwarf_Type, Dwarf_Off *, Dwarf_Error *);
int
dwarf_pubtype_die_offset(Dwarf_Type, Dwarf_Off *, Dwarf_Error *);
int
dwarf_pubtype_name_offsets(Dwarf_Type, char **, Dwarf_Off *, Dwarf_Off *, Dwarf_Error *);
int
dwarf_pubtypename(Dwarf_Type, char **, Dwarf_Error *);
void
dwarf_pubtypes_dealloc(Dwarf_Debug, Dwarf_Type *, Dwarf_Signed);
void
dwarf_ranges_dealloc(Dwarf_Debug, Dwarf_Ranges *, Dwarf_Signed);
void dwarf_reset_section_bytes(Dwarf_P_Debug);
Dwarf_Half dwarf_set_frame_cfa_value(Dwarf_Debug, Dwarf_Half);
Dwarf_Half dwarf_set_frame_rule_initial_value(Dwarf_Debug, Dwarf_Half);
Dwarf_Half dwarf_set_frame_rule_table_size(Dwarf_Debug, Dwarf_Half);
Dwarf_Half dwarf_set_frame_same_value(Dwarf_Debug, Dwarf_Half);
Dwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug, Dwarf_Half);
int
dwarf_set_reloc_application(int);
Dwarf_Ptr dwarf_seterrarg(Dwarf_Debug, Dwarf_Ptr);
Dwarf_Handler dwarf_seterrhand(Dwarf_Debug, Dwarf_Handler);
int
dwarf_siblingof(Dwarf_Debug, Dwarf_Die, Dwarf_Die *, Dwarf_Error *);
int
dwarf_siblingof_b(Dwarf_Debug, Dwarf_Die, Dwarf_Die *, Dwarf_Bool, Dwarf_Error *);
int
dwarf_srcfiles(Dwarf_Die, char ***, Dwarf_Signed *, Dwarf_Error *);
int
dwarf_srclang(Dwarf_Die, Dwarf_Unsigned *, Dwarf_Error *);
int
dwarf_srclines(Dwarf_Die, Dwarf_Line **, Dwarf_Signed *, Dwarf_Error *);
void
dwarf_srclines_dealloc(Dwarf_Debug, Dwarf_Line *, Dwarf_Signed);
int
dwarf_start_macro_file(Dwarf_P_Debug, Dwarf_Unsigned, Dwarf_Unsigned, Dwarf_Error *);
int
dwarf_tag(Dwarf_Die, Dwarf_Half *, Dwarf_Error *);
Dwarf_Signed
dwarf_transform_to_disk_form(Dwarf_P_Debug, Dwarf_Error *);
int
dwarf_type_cu_offset(Dwarf_Type, Dwarf_Off *, Dwarf_Error *);
int
dwarf_type_die_offset(Dwarf_Type, Dwarf_Off *, Dwarf_Error *);
int
dwarf_type_name_offsets(Dwarf_Type, char **, Dwarf_Off *, Dwarf_Off *, Dwarf_Error *);
int
dwarf_typename(Dwarf_Type, char **, Dwarf_Error *);
void
dwarf_types_dealloc(Dwarf_Debug, Dwarf_Type *, Dwarf_Signed);
int
dwarf_undef_macro(Dwarf_P_Debug, Dwarf_Unsigned, char *, Dwarf_Error *);
int
dwarf_var_cu_offset(Dwarf_Var, Dwarf_Off *, Dwarf_Error *);
int
dwarf_var_die_offset(Dwarf_Var, Dwarf_Off *, Dwarf_Error *);
int
dwarf_var_name_offsets(Dwarf_Var, char **, Dwarf_Off *, Dwarf_Off *, Dwarf_Error *);
int
dwarf_varname(Dwarf_Var, char **, Dwarf_Error *);
void
dwarf_vars_dealloc(Dwarf_Debug, Dwarf_Var *, Dwarf_Signed);
int
dwarf_vendor_ext(Dwarf_P_Debug, Dwarf_Unsigned, char *, Dwarf_Error *);
int
dwarf_weak_cu_offset(Dwarf_Weak, Dwarf_Off *, Dwarf_Error *);
int
dwarf_weak_die_offset(Dwarf_Weak, Dwarf_Off *, Dwarf_Error *);
int
dwarf_weak_name_offsets(Dwarf_Weak, char **, Dwarf_Off *, Dwarf_Off *, Dwarf_Error *);
int
dwarf_weakname(Dwarf_Weak, char **, Dwarf_Error *);
void
dwarf_weaks_dealloc(Dwarf_Debug, Dwarf_Weak *, Dwarf_Signed);
int
dwarf_whatattr(Dwarf_Attribute, Dwarf_Half *, Dwarf_Error *);
int
dwarf_whatform(Dwarf_Attribute, Dwarf_Half *, Dwarf_Error *);
int
dwarf_whatform_direct(Dwarf_Attribute, Dwarf_Half *, Dwarf_Error *);
#ifdef __cplusplus
}
#endif

#endif /* !_LIBDWARF_H_ */
